﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Gustozzi.DAL;
using System.Text;

namespace WebGustozzi.ModuloVentas
{
    public partial class wfAgregarDireccion : System.Web.UI.Page
    {
        VentasDataEntities contexto = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack) 
            {
                Inicializa();
            }
        }

        public void Inicializa() 
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities();
            }

            var oTipoProducto = (from p in contexto.TiposDireccion
                                select new {Codigo=p.codigoTipoDireccion,Nombre=p.descripcion});
            ddlTipoDireccion.DataSource = oTipoProducto;
            ddlTipoDireccion.DataValueField = "Codigo";
            ddlTipoDireccion.DataTextField = "Nombre";
            ddlTipoDireccion.DataBind();

            var oDepartamento = (from d in contexto.Departamentos
                                 select new { Codigo = d.codigoDpto, Nombre = d.nombreDpto });
            ddlDepartamento.DataSource = oDepartamento;
            ddlDepartamento.DataValueField = "Codigo";
            ddlDepartamento.DataTextField = "Nombre";
            ddlDepartamento.DataBind();
        }

        protected void imbAceptar_Click(object sender, ImageClickEventArgs e)
        {            
            try
            {
            GuardarDireccion();
            StringBuilder strConstructor=new StringBuilder();
            if (hdfNumDirecciones.Value.Equals(string.Empty)) 
            {
                hdfNumDirecciones.Value = "0";
            }
            string sNavigateURL = String.Format("<script>window.opener.document.getElementById('CPHPrincipal_hdfNumDirecciones').value=\"{0}\";", hdfNumDirecciones.Value);

            strConstructor.Append(sNavigateURL);
            strConstructor.Append("window.close();</script>");

            Response.Write(strConstructor.ToString());
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        protected void ddlDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (contexto == null) 
            {
                contexto = new VentasDataEntities();
            }
            int codigoDpto =0;
            ddlDepartamento.DataSource = null;
            if(ddlDepartamento.SelectedIndex >0)
            {
                codigoDpto =Convert.ToInt32(ddlDepartamento.SelectedValue);
                var oProvincia = (from d in contexto.Provincias
                                  where d.codigoDpto == codigoDpto
                                  select new { Codigo = d.codigoProvincia, Nombre = d.nombreProvincia });
                ddlProvincia.DataSource = oProvincia;
                ddlProvincia.DataValueField = "Codigo";
                ddlProvincia.DataTextField = "Nombre";
                ddlProvincia.DataBind();
            }
            
           
        }

        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (contexto == null)
            {
                contexto = new VentasDataEntities();
            }
            int codigoDpto =0;
            if (ddlDepartamento.SelectedIndex > 0)
            {
                codigoDpto = Convert.ToInt32(ddlDepartamento.SelectedValue);
            }

            int codigoProv = 0;
            ddlProvincia.DataSource = null;

            if (ddlProvincia.SelectedIndex > 0)
            {
                codigoProv = Convert.ToInt32(ddlProvincia.SelectedValue);
                var oDistrito = (from d in contexto.Distritos
                                  where d.codigoDpto == codigoDpto  &&
                                  d.codigoProvincia ==codigoProv
                                  select new { Codigo = d.codigoDistrito, Nombre = d.nombreDistrito });
                ddlDistrito.DataSource = oDistrito;
                ddlDistrito.DataValueField = "Codigo";
                ddlDistrito.DataTextField = "Nombre";
                ddlDistrito.DataBind();
            }
        }

        public void GuardarDireccion() 
        {
            if (contexto == null)
            {
                contexto = new VentasDataEntities();
            }

            int idCliente = 0;
            var listado = Session["listaDirecciones"];
            List<ClienteDireccion> listadoDirecciones = null;
            if (listado == null)
            {
                listadoDirecciones = new List<ClienteDireccion>();
            }
            else 
            {
                listadoDirecciones =(List<ClienteDireccion>)listado;
            }

            
            int idDepartamento=0;
            int idProvincia=0;
            int idDistrito=0;

            if(ddlDepartamento.SelectedIndex >0)
            {
                idDepartamento=Convert.ToInt32 (ddlDepartamento.SelectedValue);
            }
            else
            {
                throw new Exception("Seleccione Departamento");
            }
            
            if(ddlProvincia.SelectedIndex >0)
            {
                idProvincia=Convert.ToInt32 (ddlProvincia.SelectedValue);
            }
            else
            {
                throw new Exception("Seleccione Provincia");
            }
            
            if(ddlDistrito.SelectedIndex >0)
            {
                idDistrito=Convert.ToInt32 (ddlDistrito.SelectedValue);
            }
            else
            {
                throw new Exception("Seleccione Distrito");
            }
            ClienteDireccion oDireccion = null;

            int idDireccion = 0;

            if (!hdfIdDireccion.Value.Trim().Equals(string.Empty))
            {
                idDireccion = Convert.ToInt32(hdfIdDireccion.Value);
                oDireccion.codigoDireccion = idDireccion;

                oDireccion = (from p in listadoDirecciones
                             where p.codigoDireccion == idDireccion
                             select p).First();
            }
            else 
            {
                oDireccion = new ClienteDireccion();
            }
           
            string direccion = txtDireccion.Text.Trim ();
            if(direccion.Equals(string.Empty))
            {
                throw  new Exception("Ingrese Direccion");
            }
            string referencia = txtReferencia.Text.Trim();
          
            int tipoDireccion = 0;

            if (ddlTipoDireccion.SelectedIndex > 0)
            {
                tipoDireccion = Convert.ToInt32(ddlTipoDireccion.SelectedValue);
                oDireccion.codigoTipoDireccion = tipoDireccion;
            }
            else 
            {
                throw new Exception("Seleccione Tipo de direccion");
            }

            string codigoEstado = string.Empty;

            if (ddlEstado.SelectedIndex > 0)
            {
                codigoEstado = ddlEstado.SelectedValue;
            }
            else 
            {
                throw new Exception("Seleccione estado");
            }

            oDireccion.codigoCliente = idCliente;
            oDireccion.codigoDpto = idDepartamento;
            oDireccion.codigoProvincia = idProvincia;
            oDireccion.codigoDistrito = idDistrito;
            oDireccion.descripcionCompleta = direccion;
            oDireccion.referenciaAdic = referencia;
            oDireccion.estado = codigoEstado;

            if (hdfIdDireccion.Value.Trim().Equals(string.Empty))           
            {
                idDireccion = (from p in contexto.ClienteDirecciones
                                   select p.codigoDireccion).Max();
                idDireccion += 1;
                oDireccion.codigoDireccion = idDireccion;
                listadoDirecciones.Add(oDireccion);
                hdfNumDirecciones.Value = listadoDirecciones.Count.ToString();
                Session["listaDirecciones"] = listadoDirecciones;
            }
        }
    }
}